package Logica.Celdas;

import Graficas.InterfaceGrafica;
import Graficas.SpriteMovements;
import Graficas.SpriteMovementsPrioridad;
import Logica.Mario;
import Logica.PowerUps.PowerUp;

/**
 * Especializa a una Caja, permitiendo almacenar una cierta cantidad de monedas.
 * 
 * @author Mariano Rodecker
 * @author Matias Varela
 *
 */
public class CajaMoneda extends Caja {
	/* ################## ATRIBUTOS DE INSTANCIA ######################## */
	protected SpriteMovementsPrioridad smMonedas;
	protected int monedas;
	protected boolean inhabilitada;
	
	/* ################## CONSTRUCTORES ######################## */
	public CajaMoneda(int sizeX, int sizeY, SpriteMovements spriteMovements,SpriteMovementsPrioridad smMonedas, InterfaceGrafica ig, PowerUp powerup) {
		super(sizeX, sizeY, spriteMovements, ig, powerup);
		monedas = 10;
		inhabilitada = false;
		this.smMonedas = smMonedas;
	}
	/* ################## COMANDOS ######################## */

	public void setSpriteMovementsMonedas(SpriteMovementsPrioridad smMonedas){
		this.smMonedas = smMonedas;
	}
	@Override
	public void golpear(Mario m) {
		if (!inhabilitada) {
			monedas--;
			m.aumentarPuntos(intel.getPuntuacion().puntosPorMoneda());
			if (monedas ==0)
				inhabilitada=true;	
			//if (!this.isInAnimation())
				ig.hacerAnimacionMonedas(this,smMonedas, getX(), getY());
		}
	}
	@Override
	public CajaMoneda clone() {
		CajaMoneda toReturn = new CajaMoneda(this.getSizeX(), this.getSizeY(), this.getSpriteMovements(),this.smMonedas, ig, powerup);
		toReturn.setX(this.getX());
		toReturn.setY(this.getY());
		toReturn.setInAnimation(this.isInAnimation());
		toReturn.setInteligencia(intel);
		toReturn.monedas = this.getMonedas();
		toReturn.inhabilitada = this.isInhabilitada();
		toReturn.setSpriteMovementsMonedas((SpriteMovementsPrioridad)smMonedas.clone());
		if (powerup != null)
			toReturn.setPowerUp(powerup.clone());
		return toReturn;
	}
	/* ################## CONSULTAS ######################## */
	/**
	 * Retorna la cantidad de monedas que tiene la caja
	 * @return
	 */
	public int getMonedas() {
		return monedas;
	}
	/**
	 * Retorna si la caja esta habilitada o no.
	 * @return
	 */
	public boolean isInhabilitada() {
		return inhabilitada;
	}

	

}

